/*
 * IndiceInvertido.cpp
 *
 *  Created on: 27/04/2013
 *      Author: pancho
 */

#include "IndiceInvertido.h"

IndiceInvertido::IndiceInvertido(string path) {
	string rutaArbol  = path;
	rutaArbol += PATH_ARBOL_INVERTIDO;
	this->indiceTermino = new ArbolBMas(rutaArbol,"char*");
}

//supongo que la frase viene sin espacios de mas (ninguno al principio y l final, ni dos juntos)
list<unsigned int>* IndiceInvertido::BuscarFrase(string frase) {
	list<unsigned int> *resultado = new list<unsigned int>();
	bool seguir = true;
	bool encontro = true;
	while(seguir) {
		if(!encontro)
			seguir = false;
		int pos = frase.find(' ');
		string palabra = frase.substr(0, pos);
		frase = frase.substr(pos + 1);
		if(palabra != "") {
			 list<unsigned int> *docsPalabra = this->indiceTermino->buscarClave(Clave(palabra));
			 if(docsPalabra != NULL) {
				 docsPalabra->sort();
			 	 resultado->merge(*docsPalabra);
			 	 resultado->unique();
			 	 delete docsPalabra;
			 }
		}
		if(string::npos != frase.find(' '))
			pos = frase.find(' ');
		else
			encontro = false;
	}
	if(resultado->size() == 0) {
		delete resultado;
		return NULL;
	}
	return resultado;
}

IndiceInvertido::~IndiceInvertido() {
	delete this->indiceTermino;
}

void IndiceInvertido::agregar(string palabra, unsigned int id_documento) {
	this->indiceTermino->Agregar(Clave(palabra), id_documento);
}

void IndiceInvertido::eliminar(string palabra, unsigned int id_documento) {
	this->indiceTermino->Borrar(Clave(palabra), id_documento);
}
